<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarComponent;
use App\Http\Controllers\Controller;
use \App\Models\CarModels\CarEquipment;
use http\Env\Response;
use Illuminate\Http\Request;
use Illuminate\Database\QueryException;
use Validator;

/**
 * @group 运营管理->车辆基础信息管理->部件类型管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 *
 * Query Parameters 表示返回参数的名称
 */
class CarComponentController extends Controller
{
    /**
     * 部件信息 bug搜索中有部件名称 但是实际却没有部件名称
     * @bodyParam search string optional 搜索部件细类(模糊查询)
     * @bodyParam kind int optional 车辆类型 分类筛选 传递车辆类型的id号 精确匹配
     *
     * @queryParam  detail
     * @queryParam  kind 车辆类型
     * @queryParam  desc 备注
     */
    public function index(Request $request){
        $query = CarComponent::where(function ($q) use ($request){
           $request->has('search') && $q->where('detail','LIKE',"%{$request->get('search')}%");
           $request->has('kind') && $q->where('kind_id', $request->get("kind"));
        })->with('kind')->orderBy('id','desc');
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);
    }

    /**
     * 部件信息添加
     *
     * @bodyParam detail string required 部件细则
     * @bodyParam kind_id int required 车辆类型 外键 使用车辆类型接口添加
     * @bodyParam desc string optional 备注
     *
     * @queryParam detail 部件细则
     * @queryParam kind 部件类型
     * @queryParam desc 备注
     */
    public function store(Request $request){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        try{
            $data=CarComponent::create($request->all());
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"添加失败".$e->getMessage()],500),500);
        }
    }

    /**
     * 部件信息显示(单个信息显示)
     *
     * @queryParam  detail 部件细则
     * @queryParam  kind 部件类型
     * @queryParam  desc 备注
     *
     */
    public function show($pk){
        $data = CarComponent::with('kind')->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该部件信息"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     *
     *
     * @bodyParam detail string optional 部件细则
     * @bodyParam kind_id int optional 车辆类型 外键 使用车辆类型接口添加
     * @bodyParam desc string optional 备注
     *
     * @queryParam  detail 部件细则
     * @queryParam  kind_id 部件类型 外键
     * @queryParam  desc 备注
     *
     */
    public function update(Request $request, $pk){
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $carkind = CarComponent::find($pk);
        if($carkind == []){
            return response()->json(encodeMsg(["message"=>"没有该部件信息"],404),404);
        }
        try {
            $carkind->update($request->all());
            return response()->json(encodeMsg($carkind,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"修改错误"],500),500);
        }
    }

    /**
     * 设备信息删除
     */

    public function destroy($pk){
        $data = CarComponent::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该部件信息"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
